//package com.szsky.sky.config.Fileter;
//
//import com.alibaba.fastjson2.JSON;
//import com.alibaba.fastjson2.JSONObject;
//import com.szsky.sky.utils.AESUtil;
//import lombok.extern.slf4j.Slf4j;
//import org.apache.commons.lang3.StringUtils;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//import org.springframework.stereotype.Component;
//
//import javax.servlet.*;
//import javax.servlet.annotation.WebFilter;
//import javax.servlet.http.HttpServletRequest;
//import javax.servlet.http.HttpServletResponse;
//import javax.servlet.http.HttpServletResponseWrapper;
//import java.io.*;
//import java.nio.charset.StandardCharsets;
//import java.util.Base64;
//import java.util.HashMap;
//import java.util.Map;
//
///**
// * 对接口输出参数进行加密的过滤器
// */
//@Slf4j
//@Component
//@WebFilter(filterName = "appResponseFilter", urlPatterns = "/*")
//public class AppResponseFilter implements Filter {
//
//
//    @Override
//    public void init(FilterConfig filterConfig) throws ServletException {
//        // 初始化代码
//    }
//
//    @Override
//    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
//            throws IOException, ServletException {
//        HttpServletRequest httpRequest = (HttpServletRequest) request;
//        String requestURI = httpRequest.getRequestURI();
//
//        // 仅处理/app/路径下的接口
//        if (requestURI.contains("/app/")) {
//            // 创建可重复读取的响应包装器
//            BufferedServletResponseWrapper responseWrapper =
//                    new BufferedServletResponseWrapper((HttpServletResponse) response);
//
//            try {
//                // 继续处理请求，响应内容会被捕获到包装器中
//                chain.doFilter(request, responseWrapper);
//
//                // 获取原始响应数据
//                byte[] originalData = responseWrapper.getContentAsByteArray();
//                String originalContent = new String(originalData, StandardCharsets.UTF_8);
//
//                // 加密处理
//                String encryptedContent = encryptResponse(originalContent);
//
//                // 设置加密后的内容作为响应
//                byte[] encryptedData = encryptedContent.getBytes(StandardCharsets.UTF_8);
//                response.setContentLength(encryptedData.length);
//
//                // 输出加密后的内容
//                try (OutputStream out = response.getOutputStream()) {
//                    out.write(encryptedData);
//                    out.flush();
//                }
//            } catch (Exception e) {
//                log.error("加密响应数据失败：{}", e);
//                // 加密失败时返回错误信息
//                response.setContentType("application/json;charset=UTF-8");
//                try (PrintWriter out = response.getWriter()) {
//                    out.print("{\"code\": 500, \"message\": \"failed\"}");
//                    out.flush();
//                }
//            }
//        } else {
//            // 非app路径的接口直接放行
//            chain.doFilter(request, response);
//        }
//    }
//
//    @Override
//    public void destroy() {
//        // 销毁资源
//    }
//
//    /**
//     * 对响应内容进行加密处理
//     *
//     * @param content 原始响应内容
//     * @return 加密后的响应内容
//     */
//    private String encryptResponse(String content) {
//        try {
//            if (StringUtils.isBlank(content)) {
//                Map<String, Object> encryptedResponse = new HashMap<>();
//                encryptedResponse.put("code", "500");
//                encryptedResponse.put("message", "failed");
//                return JSON.toJSONString(encryptedResponse);
//            }
//            // 将响应内容转换为JSON对象（根据实际情况调整）
//            JSONObject jsonObject = JSON.parseObject(content);
//
//            // 将JSON对象转换为Base64编码的字符串
//            String base64Data = Base64.getEncoder().encodeToString(jsonObject.toJSONString().getBytes(StandardCharsets.UTF_8));
//
//            // 使用AES加密Base64数据
//            String encryptedData = AESUtil.encrypt(base64Data);
//
//            // 构建加密后的响应结构
//            Map<String, Object> encryptedResponse = new HashMap<>();
//            encryptedResponse.put("code", "200");
//            encryptedResponse.put("message", "success");
//            encryptedResponse.put("encryptFlag", true);
//            encryptedResponse.put("data", encryptedData);
//            encryptedResponse.put("data2", content);
//
//            // 返回加密后的JSON响应
//            return JSON.toJSONString(encryptedResponse);
//        } catch (Exception e) {
//            log.error("加密响应内容失败: {}", content, e);
//            // 加密失败时返回原始内容
//            Map<String, Object> encryptedResponse = new HashMap<>();
//            encryptedResponse.put("code", "500");
//            encryptedResponse.put("message", "failed");
//            return JSON.toJSONString(encryptedResponse);
//
//        }
//    }
//
//    /**
//     * 用于捕获响应内容的包装器
//     */
//    private static class BufferedServletResponseWrapper extends HttpServletResponseWrapper {
//        private final ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
//        private final PrintWriter writer;
//
//        public BufferedServletResponseWrapper(HttpServletResponse response) {
//            super(response);
//            writer = new PrintWriter(new OutputStreamWriter(byteArrayOutputStream, StandardCharsets.UTF_8));
//        }
//
//        @Override
//        public ServletOutputStream getOutputStream() {
//            return new ServletOutputStream() {
//                @Override
//                public boolean isReady() {
//                    return true;
//                }
//
//                @Override
//                public void setWriteListener(WriteListener listener) {
//                    // 实现必要的方法
//                }
//
//                @Override
//                public void write(int b) {
//                    byteArrayOutputStream.write(b);
//                }
//            };
//        }
//
//        @Override
//        public PrintWriter getWriter() {
//            return writer;
//        }
//
//        public byte[] getContentAsByteArray() {
//            writer.flush();
//            return byteArrayOutputStream.toByteArray();
//        }
//    }
//}